home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / sphigs / sph_srgp.lha / srgp / src / srgp_raster.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-09  |  2.7 KB  |  86 lines

  1. #include "HEADERS.h"
  2. #include "srgplocal.h"
  3.  
  4. #ifdef THINK_C
  5. #include "ChooseWhichQuickdraw.h"
  6. #endif
  7.  
  8. #define DFIXED(yy)\
  9. (srgp__curActiveCanvasSpec.max_ycoord - (yy))
  10. #define SFIXED(yy)\
  11. (srgp__canvasTable[source_canvas_id].max_ycoord - (yy))
  12.  
  13.  
  14. void
  15. SRGP_copyPixel (canvasID source_canvas_id, 
  16.         rectangle source_rect, 
  17.         point dest_corner)
  18. {
  19.    register int height;
  20.  
  21.    DEBUG_AIDS{
  22.       SRGP_trace (SRGP_logStream, "SRGP_copyPixel: %d (%d,%d)->(%d,%d) -----> (%d,%d)\n",
  23.           source_canvas_id, ExplodeRect(source_rect), ExplodePt(dest_corner));
  24.       srgp_check_system_state();
  25.       srgp_check_extant_canvas (source_canvas_id);
  26.       srgp_check_rectangle
  27.      (source_rect.bottom_left.x, source_rect.bottom_left.y,
  28.       source_rect.top_right.x, source_rect.top_right.y);
  29.       LeaveIfNonFatalErr();
  30.    }
  31.  
  32.  
  33. #ifdef X11
  34.    height = (source_rect.top_right.y - source_rect.bottom_left.y + 1);
  35.    XCopyArea (srgpx__display,
  36.           srgp__canvasTable[source_canvas_id].drawable.bitmap,
  37.           srgp__curActiveCanvasSpec.drawable.bitmap,
  38.           srgp__curActiveCanvasSpec.gc_fill,
  39.           source_rect.bottom_left.x, SFIXED(source_rect.top_right.y),
  40.           (source_rect.top_right.x - source_rect.bottom_left.x + 1),
  41.           height,
  42.           dest_corner.x, DFIXED(dest_corner.y + height - 1));
  43. #endif
  44.  
  45. #ifdef THINK_C
  46. {
  47.    Rect sRect, dRect;
  48.    int modeTable[] = {srcCopy, srcXor, srcOr, notSrcBic};
  49. #ifdef COLOR_QUICKDRAW
  50.    CGrafPtr curcgport = (CGrafPtr)thePort;
  51.    long savefgcolor, savebgcolor;
  52. #endif
  53.    
  54.    
  55.    SetRect (&sRect, source_rect.bottom_left.x, SFIXED(source_rect.top_right.y), 
  56.        source_rect.top_right.x+1, SFIXED(source_rect.bottom_left.y) + 1);
  57.    SetRect(&dRect, 
  58.        dest_corner.x, 
  59.        DFIXED(dest_corner.y + source_rect.top_right.y - source_rect.bottom_left.y),
  60.        dest_corner.x + source_rect.top_right.x - source_rect.bottom_left.x + 1, 
  61.        DFIXED(dest_corner.y) + 1);
  62.  
  63. #ifdef COLOR_QUICKDRAW       
  64.    savefgcolor = thePort->fgColor; savebgcolor = thePort->bkColor;
  65.    thePort->fgColor = 255;  thePort->bkColor = 0;  /*THIS IS DANGEROUSLY STUPID*/
  66.    
  67. #  define canvasGrafport(i) (*((CGrafPtr)(srgp__canvasTable[i].drawable.xid)))
  68.    CopyBits (*(canvasGrafport(source_canvas_id).portPixMap), 
  69.          *(canvasGrafport(srgp__curActiveCanvasId).portPixMap), 
  70.              &sRect, &dRect, 
  71.              modeTable[srgp__curActiveCanvasSpec.attributes.write_mode], NULL);
  72.  
  73.    thePort->fgColor = savefgcolor;  thePort->bkColor = savebgcolor;
  74. #else
  75. #  define canvasGrafport(i) (*((GrafPtr)(srgp__canvasTable[i].drawable.xid)))
  76.    CopyBits (&(canvasGrafport(source_canvas_id).portBits), 
  77.          &(canvasGrafport(srgp__curActiveCanvasId).portBits), 
  78.              &sRect, &dRect, 
  79.              modeTable[srgp__curActiveCanvasSpec.attributes.write_mode], NULL);
  80.  
  81. #endif
  82. }
  83. #endif
  84.  
  85. }
  86.